package com.demo.utils;

import cn.hutool.core.collection.CollUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.demo.core.exception.ParameterException;
import com.demo.domain.ScientificDirection;
import org.springframework.lang.NonNull;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

@Component
public class StringUtils {

    /**
     * 分词以进行搜索（例将”大创“转为”大%创“的形式）
     *
     * @param originalKw
     * @return
     */
    public String splitWordsForSearch(String originalKw) {
        String newKw = "";
        if (originalKw != null && !originalKw.equals("") && originalKw.length() > 0) {
            //截取每个字符
            char[] charList = originalKw.toCharArray();
            //加%模糊查询符号
            for (char i : charList) {
                newKw += "%" + i;
                System.out.println(newKw);
            }
            //截去前后的%
            newKw = newKw.substring(1, newKw.length());
        }
        return newKw;
    }

    /**
     * 将["1","1"]格式字符串转化为1，1格式
     *
     * @param origin
     * @return
     */
    public String parseJsonToString(String origin) {
        JSONArray jsonArray = JSON.parseArray(origin);
        List<String> list = jsonArray.toJavaList(String.class);
        if(CollUtil.isEmpty(list)) return "";
        StringBuilder sb = new StringBuilder();
        for (String str : list) {
            sb.append(str).append(", ");
        }
        String str = sb.toString().substring(0, sb.toString().length() - 2);
        return str;
    }


    /**
     * 将查询到的记录按教师进行分类
     * 将对应着数据库一条记录的一个个ScientificDirection对象按照教师进行分类封装
     *
     * @param list0
     * @param num
     * @return
     */

    public List<List<ScientificDirection>> listByTeacher(@NonNull List<ScientificDirection> list0, int num) throws ParameterException {
        if (list0 == null || list0.size() == 0) {
            throw new ParameterException("list0为空");
        }
        if (num == 0) {
            throw new ParameterException("num为0");
        }
//        list0为查询到的所有记录
//        list2为某教师的所有科研方向记录
        List<List<ScientificDirection>> list2 = new ArrayList<>();
        String name = list0.get(0).getSdName().trim();
        int j = 0;
        //求list2
//        一共有num个老师
        for (int i = 0; i < num; i++) {
//            每个老师的所有科研方向放进list1
            List<ScientificDirection> list1 = new ArrayList<>();
            for (; j < list0.size(); j++) {
                if (list0.get(j).getSdName().trim().equals(name.trim())) {
                    list1.add(list0.get(j));
                } else break;
            }
            list2.add(list1);
            //将name换成下一个需要循环的教师名字
            if (j < list0.size()) {
                name = list0.get(j).getSdName().trim();
            }
            //若已经遍历完所有记录则停止循环
            else break;
        }
        return list2;
    }

    public Boolean isEmpty(String str) throws Exception {
        return str == null || str.equals("") ? true : false;
    }

}
